Я столкнулся с дилеммой нормализации.
Теперь, когда OpenID объявлен как сбой , я хотел бы включить его в свой веб-сайт.Я также собираюсь добавить FB Connect, пока я на нем.
Очевидно, это означает, что у меня будет отношение 1: много между учетными записями и логинами.Это просто.Однако это также означает, что не все типы входа в систему одинаковы.
Это означает, что мне нужно решить, как хранить три набора одинаковых по функциям, но разных по форме информационных блоков.Это означает, что я должен сделать надоедливый выбор, и я не уверен, есть ли выигрышное «лучшее» решение.Вот почему я прихожу к вам
Я вижу три немедленных варианта.
Вариант 1: таблица логинов со строками для каждого типа
- ID
- Account ID
- Username
- Password
- Facebook ID
- OpenID URL
- OpenID ID
Вариант 2: таблица логинов с общими строками
- ID
- Account ID
- Login Type
- Generic Field 1
- Generic Field 2
Вариант 3: Таблица логинов для каждого типа входа
Password Logins
- ID
- Account ID
- Username
- Password
FB Connect Logins
- ID
- Account ID
- Facebook ID
Open ID Logins
- ID
- Account ID
- OpenID URL
- OpenID ID
Наличие специальныхстроки для каждого типа входа в общую таблицу имен входа (т. е. вариант 1) ощущаются грязными и ненормализованными.
Наличие общих строк в таблице общего входа (т. е. вариант 2) выглядит грязными и сильно запутанными.
Наличие отдельной таблицы для каждого типа входа в систему (т. Е. Вариант 3) кажется чистым / нормализованным, но, возможно, неэффективным и, возможно, запутанным.
Как бы другие достигли этого?Есть ли другие варианты?Что будет иметь самые негативные последствия в реальности?
Имейте в виду, что я хотел бы включить дополнительные типы входа в систему (например, Twitter / следующий большой Thig / любой другой), как они появляются.