Index: database/drizzle/schema/relations.ts
===================================================================
--- database/drizzle/schema/relations.ts	(revision fdd776b4ca5fc651b66cb07a78a265c132fb9deb)
+++ database/drizzle/schema/relations.ts	(revision fdd776b4ca5fc651b66cb07a78a265c132fb9deb)
@@ -0,0 +1,324 @@
+import { relations } from "drizzle-orm";
+
+import {
+    componentsTable,
+    CPUTable,
+    GPUTable,
+    memoryTable,
+    powerSupplyTable,
+    pcCaseTable,
+    caseStorageFormFactorsTable,
+    casePsFormFactorsTable,
+    caseMoboFormFactorsTable,
+    coolerTable,
+    coolerCPUSocketsTable,
+    motherboardTable,
+    storageTable,
+    memoryCardTable,
+    opticalDriveTable,
+    soundCardTable,
+    soundCardChannelsTable,
+    cablesTable,
+    networkAdapterTable,
+    networkCardTable,
+
+} from "./components";
+
+import {
+    buildTable,
+    buildComponentTable,
+    favoriteBuildTable,
+    ratingBuildTable,
+    reviewTable
+} from "./builds"
+
+import {
+    usersTable,
+    adminsTable,
+    suggestionsTable
+} from "./users";
+
+export const usersRelations = relations(usersTable, ({ many, one }) => ({
+    builds: many(buildTable),
+    reviews: many(reviewTable),
+    favorites: many(favoriteBuildTable),
+    ratings: many(ratingBuildTable),
+    suggestions: many(suggestionsTable),
+    adminProfile: one(adminsTable, {
+        fields: [usersTable.id],
+        references: [adminsTable.userId],
+    })
+}));
+
+export const adminsRelations = relations(adminsTable, ({ one, many }) => ({
+    user: one(usersTable, {
+        fields: [adminsTable.userId],
+        references: [usersTable.id],
+    }),
+    moderatedSuggestions: many(suggestionsTable),
+}));
+
+export const suggestionsRelations = relations(suggestionsTable, ({ one }) => ({
+    author: one(usersTable, {
+        fields: [suggestionsTable.userId],
+        references: [usersTable.id],
+    }),
+    moderator: one(adminsTable, {
+        fields: [suggestionsTable.adminId],
+        references: [adminsTable.userId],
+    }),
+}));
+
+export const buildRelations = relations(buildTable, ({ one, many }) => ({
+    owner: one(usersTable, {
+        fields: [buildTable.userId],
+        references: [usersTable.id],
+    }),
+    buildComponents: many(buildComponentTable),
+    favorites: many(favoriteBuildTable),
+    ratings: many(ratingBuildTable),
+    reviews: many(reviewTable),
+}));
+
+export const buildComponentRelations = relations(buildComponentTable, ({ one }) => ({
+    build: one(buildTable, {
+        fields: [buildComponentTable.buildId],
+        references: [buildTable.id],
+    }),
+    component: one(componentsTable, {
+        fields: [buildComponentTable.componentId],
+        references: [componentsTable.id],
+    }),
+}));
+
+export const favoriteBuildRelations = relations(favoriteBuildTable, ({ one }) => ({
+    user: one(usersTable, {
+        fields: [favoriteBuildTable.userId],
+        references: [usersTable.id],
+    }),
+    build: one(buildTable, {
+        fields: [favoriteBuildTable.buildId],
+        references: [buildTable.id],
+    }),
+}));
+
+export const ratingBuildRelations = relations(ratingBuildTable, ({ one }) => ({
+    user: one(usersTable, {
+        fields: [ratingBuildTable.userId],
+        references: [usersTable.id],
+    }),
+    build: one(buildTable, {
+        fields: [ratingBuildTable.buildId],
+        references: [buildTable.id],
+    }),
+}));
+
+export const reviewRelations = relations(reviewTable, ({ one }) => ({
+    author: one(usersTable, {
+        fields: [reviewTable.userId],
+        references: [usersTable.id],
+    }),
+    build: one(buildTable, {
+        fields: [reviewTable.buildId],
+        references: [buildTable.id],
+    }),
+}));
+
+export const componentsRelations = relations(componentsTable, ({ many, one }) => ({
+    buildComponents: many(buildComponentTable),
+
+    cpu: one(CPUTable, {
+        fields: [componentsTable.id],
+        references: [CPUTable.componentId]
+    }),
+    gpu: one(GPUTable, {
+        fields: [componentsTable.id],
+        references: [GPUTable.componentId]
+    }),
+    memory: one(memoryTable, {
+        fields: [componentsTable.id],
+        references: [memoryTable.componentId]
+    }),
+    powerSupply: one(powerSupplyTable, {
+        fields: [componentsTable.id],
+        references: [powerSupplyTable.componentId]
+    }),
+    pcCase: one(pcCaseTable, {
+        fields: [componentsTable.id],
+        references: [pcCaseTable.componentId]
+    }),
+    cooler: one(coolerTable, {
+        fields: [componentsTable.id],
+        references: [coolerTable.componentId]
+    }),
+    motherboard: one(motherboardTable, {
+        fields: [componentsTable.id],
+        references: [motherboardTable.componentId]
+    }),
+    storage: one(storageTable, {
+        fields: [componentsTable.id],
+        references: [storageTable.componentId]
+    }),
+    memoryCard: one(memoryCardTable, {
+        fields: [componentsTable.id],
+        references: [memoryCardTable.componentId]
+    }),
+    opticalDrive: one(opticalDriveTable, {
+        fields: [componentsTable.id],
+        references: [opticalDriveTable.componentId]
+    }),
+    soundCard: one(soundCardTable, {
+        fields: [componentsTable.id],
+        references: [soundCardTable.componentId]
+    }),
+    cables: one(cablesTable, {
+        fields: [componentsTable.id],
+        references: [cablesTable.componentId]
+    }),
+    networkAdapter: one(networkAdapterTable, {
+        fields: [componentsTable.id],
+        references: [networkAdapterTable.componentId]
+    }),
+    networkCard: one(networkCardTable, {
+        fields: [componentsTable.id],
+        references: [networkCardTable.componentId]
+    }),
+}));
+
+export const cpuRelations = relations(CPUTable, ({ one }) => ({
+    component: one(componentsTable, {
+        fields: [CPUTable.componentId],
+        references: [componentsTable.id],
+    }),
+}));
+
+export const gpuRelations = relations(GPUTable, ({ one }) => ({
+    component: one(componentsTable, {
+        fields: [GPUTable.componentId],
+        references: [componentsTable.id],
+    }),
+}));
+
+export const memoryRelations = relations(memoryTable, ({ one }) => ({
+    component: one(componentsTable, {
+        fields: [memoryTable.componentId],
+        references: [componentsTable.id],
+    }),
+}));
+
+export const powerSupplyRelations = relations(powerSupplyTable, ({ one }) => ({
+    component: one(componentsTable, {
+        fields: [powerSupplyTable.componentId],
+        references: [componentsTable.id],
+    }),
+}));
+
+export const motherboardRelations = relations(motherboardTable, ({ one }) => ({
+    component: one(componentsTable, {
+        fields: [motherboardTable.componentId],
+        references: [componentsTable.id],
+    }),
+}));
+
+export const storageRelations = relations(storageTable, ({ one }) => ({
+    component: one(componentsTable, {
+        fields: [storageTable.componentId],
+        references: [componentsTable.id],
+    }),
+}));
+
+export const memoryCardRelations = relations(memoryCardTable, ({ one }) => ({
+    component: one(componentsTable, {
+        fields: [memoryCardTable.componentId],
+        references: [componentsTable.id],
+    }),
+}));
+
+export const opticalDriveRelations = relations(opticalDriveTable, ({ one }) => ({
+    component: one(componentsTable, {
+        fields: [opticalDriveTable.componentId],
+        references: [componentsTable.id],
+    }),
+}));
+
+export const cablesRelations = relations(cablesTable, ({ one }) => ({
+    component: one(componentsTable, {
+        fields: [cablesTable.componentId],
+        references: [componentsTable.id],
+    }),
+}));
+
+export const networkAdapterRelations = relations(networkAdapterTable, ({ one }) => ({
+    component: one(componentsTable, {
+        fields: [networkAdapterTable.componentId],
+        references: [componentsTable.id],
+    }),
+}));
+
+export const networkCardRelations = relations(networkCardTable, ({ one }) => ({
+    component: one(componentsTable, {
+        fields: [networkCardTable.componentId],
+        references: [componentsTable.id],
+    }),
+}));
+
+export const pcCaseRelations = relations(pcCaseTable, ({ one, many }) => ({
+    component: one(componentsTable, {
+        fields: [pcCaseTable.componentId],
+        references: [componentsTable.id],
+    }),
+    storageFormFactors: many(caseStorageFormFactorsTable),
+    psFormFactors: many(casePsFormFactorsTable),
+    moboFormFactors: many(caseMoboFormFactorsTable),
+}));
+
+export const caseStorageFormFactorsRelations = relations(caseStorageFormFactorsTable, ({ one }) => ({
+    pcCase: one(pcCaseTable, {
+        fields: [caseStorageFormFactorsTable.caseId],
+        references: [pcCaseTable.componentId],
+    }),
+}));
+
+export const casePsFormFactorsRelations = relations(casePsFormFactorsTable, ({ one }) => ({
+    pcCase: one(pcCaseTable, {
+        fields: [casePsFormFactorsTable.caseId],
+        references: [pcCaseTable.componentId],
+    }),
+}));
+
+export const caseMoboFormFactorsRelations = relations(caseMoboFormFactorsTable, ({ one }) => ({
+    pcCase: one(pcCaseTable, {
+        fields: [caseMoboFormFactorsTable.caseId],
+        references: [pcCaseTable.componentId],
+    }),
+}));
+
+export const coolerRelations = relations(coolerTable, ({ one, many }) => ({
+    component: one(componentsTable, {
+        fields: [coolerTable.componentId],
+        references: [componentsTable.id],
+    }),
+    cpuSockets: many(coolerCPUSocketsTable),
+}));
+
+export const coolerCpuSocketsRelations = relations(coolerCPUSocketsTable, ({ one }) => ({
+    cooler: one(coolerTable, {
+        fields: [coolerCPUSocketsTable.cooler_id],
+        references: [coolerTable.componentId],
+    }),
+}));
+
+export const soundCardRelations = relations(soundCardTable, ({ one, many }) => ({
+    component: one(componentsTable, {
+        fields: [soundCardTable.componentId],
+        references: [componentsTable.id],
+    }),
+    channels: many(soundCardChannelsTable),
+}));
+
+export const soundCardChannelsRelations = relations(soundCardChannelsTable, ({ one }) => ({
+    soundCard: one(soundCardTable, {
+        fields: [soundCardChannelsTable.soundCardId],
+        references: [soundCardTable.componentId],
+    }),
+}));
