2015-12-19 2 views
0

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

Итак, у меня есть 3 таблицы

  1. пользователь таблица таблица
  2. пользователь Google
  3. таблица пользователей Facebook.

Мой вопрос, это лучше поставить link-ID к Google table+Facebook table или лучше сделать еще две таблицы, которые связывают другие вместе.

Ex. ПОЛЬЗОВАТЕЛЯ ТАБЛИЦА

User ID 
Google ID 
Facebook ID 

или 2 таблицы, ссылающиеся на основные таблицы

GOOGLE LINK ТАБЛИЦА

User ID 
Google ID 

FACEBOOK LINK ТАБЛИЦА

User ID 
Facebook ID 
+2

его лучше использовать одну таблицу и добавить один столбец 'RegisterType =«Google | Facebook | Linkedin»' –

+0

, что это ваши требования в целом? –

+0

Я против @Justcode, так как таким образом вы потеряете целостность, лучше использовать еще 2 таблицы (применяя правило нормализации), а затем вы можете создать представление с дополнительным столбцом (тип регистра), если вы хотите – user5135401

ответ

0

ИМО, лучше использовать следующие

Users (UserId,UserName,PasswordHash--,...other fields) 
GoogleUsers (UserId,GoogleId--,...other fields) 
FacebookUsers(UserId,FacebookId--,...other fields) 

create view (UserId,InternalKey,UserType--,...other fields) 
as 
    select UserId,FacebookId,'Facebook'--,...other fields 
    from FacebookUsers 
    union all 
    select UserId,GoogleId,'Google'--,...other fields 
    from GoogleUsers 
    union all 
    select UserId,UserId,'Local Users'--,other fields 
    from Users u 
    where not exists(select 1 from FacebookUsers f where f.UserId=u.UserId) 
    and not exists(select 1 from GoogleUsers g where g.UserId=u.UserId)