Является ли причиной того, что вам нужна отдельная таблица, которую вы хотите гарантировать, когда шесть родительских таблиц ссылаются на данный экземпляр дочерней строки, который гарантированно будет одним и тем же экземпляром? Это классическая проблема с несколькими родителями. Примером того, с чем вы можете столкнуться, являются адреса или номера телефонов с несколькими таблицами контактов / контактов.
Я могу придумать пару вариантов:
Вариант 1: таблица ссылок для каждой родительской таблицы. Это будет архитектура Hoyle. Итак, что-то вроде:
Create Table MyTable(
id int not null Primary Key Clustered
, info1 varchar(50) null
, info2 varchar(50) null
, info3 varchar(50) null
)
Create Table LinkTable1(
MyTableId int not null
, ParentTable1Id int not null
, Constraint PK_LinkTable1 Primary Key Clustered( MyTableId, ParentTable1Id )
, Constraint FK_LinkTable1_ParentTable1
Foreign Key ( MyTableId )
References MyTable ( Id )
, Constraint FK_LinkTable1_ParentTable1
Foreign Key ( ParentTable1Id )
References ParentTable1 ( Id )
)
...
Create Table LinkTable2...LinkTable3
Вариант 2. Если бы вы знали, что у вас никогда не будет больше, чем, скажем, шесть таблиц, и готовы принять некоторую денормализацию и неаккуратный дизайн, вы можете добавить шесть внешних ключей к своей основной таблице. Это позволяет избежать проблемы заполнения группы таблиц ссылок и обеспечивает надлежащую ссылочную целостность. Тем не менее, этот дизайн может быстро выйти из-под контроля, если число родителей растет.
Если вы довольны существующим дизайном, то в отношении размера поля я бы использовал полное имя таблицы. Честно говоря, разница в производительности между char (3) и varchar (50) или даже varchar (128) будет незначительной для количества данных, которые вы, вероятно, поместите в таблицу. Если бы вы действительно думали, что у вас будут миллионы строк, я бы настоятельно рекомендовал вариант связывания таблиц.
Если бы вы хотели остаться с вашим дизайном и хотели получить максимальную производительность, я бы использовал tinyint с внешним ключом для таблицы, содержащей список из шести таблиц с первичным ключом tinyint. Это предотвращает «магию» числа и гарантирует, что вы сузите список родительских таблиц. Конечно, это все же не мешает осиротевшим записям. В этом дизайне вы должны использовать триггеры, чтобы сделать это.