SQlite Design Советы - PullRequest
       0

SQlite Design Советы

0 голосов
/ 10 августа 2011

Каков наилучший способ работы с внешними ключами в таблице, которая может быть из двух разных таблиц? Чтобы быть более понятным:
T1(id,c1,c2) - c1 и c2 от T2 или T3
T2(id,name)
T3(id,name)
Рассмотрим T2 и T3 должны быть разные таблицы. И если c1 от T1 (например), c2 может быть от T2 или T3.

Должен ли я:

1. Создать новую таблицу, которая содержит ассоциации и c1 и c2 указывают на идентификатор из этой таблицы? т.е. T4(id,id_from_T1,id_from_T2_or_T3,what_table)

2. Создайте 2 столбца, c1_parent, c2_parent и составьте соглашение, например, если оно равно 1, то оно из T2, если 2, то из T3.

Или есть совершенно новый, лучший способ?

Спасибо.

Ответы [ 2 ]

2 голосов
/ 10 августа 2011

Условные внешние ключи - это нестандартный SQL.Вы должны найти способ объединить ваши таблицы NAMES.При необходимости NAMES может иметь составной ключ.

Например, вместо таблиц DEFENDERS и ATTACKERS у вас будет объединенная таблица PLAYERS со столбцом, в котором указано, был ли игрок атакующим или защитным:

                          PLAYERS
                          OffenseOrDefense
                          PlayerName
                          primary key(OffenseOrDefense,PlayerName)


                         DREAM TEAM
                         position
                         offenseOrDefense
                         playerName

                         foreign key(offenseOrDefense,PlayerName) references PLAYERS(offenseOrDefense,PlayerName)
1 голос
/ 10 августа 2011

Нет хорошего механизма для гарантии того, что id не дублируется во всех трех таблицах. Так что вам лучше с T1 как:

T1(id,c1_tbl,c1_id,c2_tbl,c2_id)

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

Любой из них облегчит жизнь, когда придет время JOIN.

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