Уникальный идентификатор в таблицах - PullRequest
0 голосов
/ 21 января 2011

Прежде всего: я просмотрел похожие вопросы и не нашел ответа.Извините, если это повторение.

Я довольно новичок в MySQL.

Допустим, у меня есть три таблицы: Дома , Автомобили и Офисные здания

Все эти вещи имеют окна, поэтому мне понадобится также таблица Windows .

Теперь, каждое окноможет быть вверх или вниз, двухпанельная или однопанельная и т. д. Каждое окно имеет (исправьте, если не следует) уникальный идентификатор.Каждое окно также должно иметь запись о том, кто его открыл или закрыл, поэтому я решил, что таблица Windows необходима в первую очередь.

Вопрос: Каждое окно должно иметь parent_id.Но проблема возникает, когда есть Автомобиль с идентификатором XX, а Офисное здание и Дом с таким же идентификатором.Когда моя страница загружается, как я могу узнать, где разместить окно?

Я предполагаю, что есть много ответов на этот вопрос ... Я ищу лучший способ.

PS WindowsАвтомобили, Дома и Офисные Здания - только иллюстративные примеры.Не мои фактические данные.

Ответы [ 2 ]

2 голосов
/ 21 января 2011

Так что вы говорите, что каждое окно может принадлежать либо дому, машине или офисному зданию?Установленный шаблон для этого - полиморфная ассоциация, которая является просто причудливым словом для «сохранить тип связанной модели вместе с ее идентификатором»:

Table `windows`
===============
id
parent_id
parent_model
...

window(1, 42, 'house', ...)
window(2, 7, 'car', ...)
...

Это позволяет легко выборочно объединять и запрашивать:

SELECT * FROM `windows` JOIN `cars` ON
   (`windows`.`parent_model` = 'car' AND `windows`.`parent_id` = `cars`.`id`)
   ...
1 голос
/ 21 января 2011

Вам также может понадобиться еще одна таблица, чтобы отобразить, какое окно сопоставлено с какой сущностью (Автомобиль / Дом / Офис)

Table: window_mapping   
Columns: id (primary key / auto generated)
         Window_id (not null, ref to Window table primary key)
         Entity_id  (not null, ref to car /house /office table primary key) 
         entity _def (text with values, Car / house /office) 

Или еще один настольный подход будет

Table: window_mapping   
Columns: id (primary key / auto generated)
         Window_id (not null, ref to Window table primary key)
         house_id  (not null, ref to house table primary key) 
         car_id  (not null, ref to house table primary key) 
         office_id  (not null, ref to house table primary key) 

Я предпочитаю 1-й, хотя

Если вы расширите свои возможности, я могу попытаться помочь вам еще

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...