В статье вы ссылались на схемы таблиц, которые сравнивались с
Customer
Customer ID First Name Surname Telephone Numbers
----------- ---------- ------- -----------------
123 Robert Ingram 555-861-2025
456 Jane Wright 555-403-1659, 555-776-4100
789 Maria Fernandez 555-808-9633
против
Customer Name
Customer ID First Name Surname
----------- ---------- -------
123 Robert Ingram
456 Jane Wright
789 Maria Fernandez
Customer Telephone Number
Customer ID Telephone Number
----------- ----------------
123 555-861-2025
456 555-403-1659
456 555-776-4100
789 555-808-9633
Во втором варианте может быть задан запрос «Какие пары клиентов используют номер телефона» (игнорируя необходимость указывать имена таблиц и полей в кавычках)
SELECT
a.telephone Number,
a.Customer ID,
b.Customer ID
FROM
Customer Telephone Number a
INNER JOIN Customer Telephone Number b
ON a.telephone Number = b.telephone Number
просто как пирог
Для первого проекта на самом деле не существует стандартного SQL для этого. Каждая RDMS имеет свой собственный способ анализа полей, разделенных запятыми, и обычно это королевская PITA, а не SARGable.
Если вас интересует, что может потребоваться для анализа поля с разделителями-запятыми, воспользуйтесь этим поиском SO
https://stackoverflow.com/search?q=sql+comma+parse
Вы, вероятно, найдете все RDMS под солнцем в этом поиске
Обновление от комментария
Я не хотел писать через запятую
напрямую, но если RDBMS
может обрабатывать «коллекции» внутри,
Операции SARGable все еще могут существовать
Это несколько другой вопрос. Ответ в том, что некоторые делают. Например, тип данных XML SQL Server может сделать это, и это SARGable, так как вы можете создать для них индекс.
Тип данных XML нарушает NF1? Если я правильно помню, CJ Date утверждает «нет» в «Глубинах баз данных: теория отношений для практиков», но я мог видеть, как некоторые могли бы это сделать.