Хранить несколько идентификаторов в одном столбце - PullRequest
0 голосов
/ 02 декабря 2018

Основная идея - хранить несколько идентификаторов из областей в одном столбце.Пример

Area A  id=1
Area B  id=2

Я хочу, чтобы можно было сохранить в одном столбце область, которую может обслуживать мой клиент.Например, если мой клиент может обслуживать их обоих для хранения в одном столбце, я представляю что-то вроде:

ColumnArea
1,2 //....or whatever area can service

Затем я хочу использовать запрос SQL для извлечения этого клиента, если он содержит этот идентификатор.

Select * from customers where ColumnArea=1

Есть какая-нибудь техника или идея, делающая это?

1 Ответ

0 голосов
/ 02 декабря 2018

Вы действительно не должны этого делать.
Хранение нескольких точек данных в одном столбце - плохой дизайн.Для подробного объяснения читайте Действительно ли плохо хранить список с разделителями в столбце базы данных? , где вы увидите множество причин, по которым ответ на этот вопрос Абсолютно да!

В этих ситуациях вы хотите создать новую таблицу, связанную с существующей таблицей.В этом случае вам, вероятно, понадобятся отношения «многие ко многим», поскольку очевидно, что один клиент может обслуживать более одной области, и я предполагаю, что одна область может обслуживаться более чем одним клиентом.

Aотношение «многие ко многим» создается путем соединения двух таблиц, содержащих данные, с другой таблицей, содержащей связи между данными (таблица моста AKA).Все отношения непосредственно между таблицами являются либо один-к-одному, либо один-ко-многим, и тот факт, что существует таблица-мост, позволяет отношениям между обеими таблицами данных быть отношением многие-ко-многим.

Итак, структура базы данных, которую вы хотите, выглядит примерно так:

Customers Table
    CustomerId (Primary key)
    FirstName
    LastName
    ... Other customer related data here

Areas Table
    AreaId (Primary key)
    AreaName
    ... Other area related data here

CustomerToArea table
    CustomerId
    AreaId
    (Note: The combination of both columns is the primary key here)

Тогда вы можете выбрать клиентов для области 1 следующим образом:

SELECT C.*
FROM Customers AS C
WHERE EXISTS
(
    SELECT 1
    FROM CustomerArea As CA
    WHERE CA.CustomerId = C.CustomerId
    AND AreaId = 1
)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...