попробуйте добавить новый столбец в качестве внешнего ключа в существующую таблицу с данными и существующей манипуляцией данными - PullRequest
0 голосов
/ 08 апреля 2020

Очень простой пример. У меня есть веб-API с таблицей в базе данных

Employees
---------
Id
---------
Name

и, например, у меня 50 записей.

Теперь мне нужно реализовать функцию, чтобы добавить дополнительную информацию об отделе. Поскольку у меня есть отношения один ко многим, новая схема базы данных с идентификатором отдела

Employees           Department
----------         -----------
Id                  Id
---------           -----------
Name                Name
--------- 
DepartmentId

, для этого я выполняю запрос (я использую SQL сервер)

alter table Employees add constraint fk_employees_departmentid
foreign key (DepartmentId) references Department(Id);

Но сейчас У меня есть некоторые проблемы для обработки

1) Теперь у меня есть 50 существующих записей без кафедры. Тем не менее, я должен вручную добавить это значение? Какова лучшая практика? Для 50 записей это возможно, но для 2000 записей и более?

2), когда я добавляю столбец DepartmentId, я устанавливаю для этого столбца нулевые значения (верно?), Но как внешний ключ я не хочу разрешить нулевые значения. Могу ли я изменить это или как я могу справиться с этим?

1 Ответ

1 голос
/ 08 апреля 2020

1) Теперь у меня есть 50 существующих записей без кафедры. Тем не менее, я должен вручную добавить это значение? Какова лучшая практика? Для 50 записей это возможно, но для 2000 записей и более?

Это зависит. Вы можете создать новый отдел для «неназначенных» и назначить их всех на это; Вы можете отправить электронную таблицу в HR со словами «у следующих сотрудников нет назначенного отдела; в каком отделе они находятся? ps; не удаляйте столбец EmployeeID из листа, прежде чем отправить его обратно; мне нужно это обновить БД ". Это очень бизнес-контекстный вопрос, а не технический. С X тысячами записей легко работать. Потребуется немного времени, чтобы разобраться, если вы (или кто-то еще) делаете это вручную. Эта информация, вероятно, будет доступна где-то еще; Вы могли бы, возможно, разослать список всем руководителям отделов, в котором говорилось бы: "Кто-нибудь из этих парней ваш? Пожалуйста, удалите из этой таблицы все имена, которых у вас нет в команде, и отправьте мне обратно" , затем обновите базу данных в зависимости от того, что вы получите обратно

Поскольку это однократная операция, вам не нужно ничего особенно для этого - вы можете просто вернуть свой лист Excel и поместить в пустой столбец:

="UPDATE emp SET departmentID = 5 WHERE id = " & A1

И заполните его, чтобы сгенерировать кучу операторов обновления, скопируйте текст в инструмент запросов и нажмите «Перейти»; не нужно все загружать листом в таблицу, делать обновления и т. д. c - просто хакерский стиль объединяет что-то в excel, которое напишет для вас SQL, скопируйте / вставьте / запустите. Если HR вернул лист со списком названий отделов, тогда поместите название отдела и идентификатор где-нибудь еще на листе и используйте VLOOKUP или XLOOKUP , чтобы превратить название в отдел число, а затем составьте SQL на основе этого

2), когда я добавляю столбец DepartmentId, я устанавливаю для этого столбца нулевые значения (верно?), но в качестве внешнего ключа я не Я не хочу разрешать нулевые значения. Могу ли я изменить это или как я могу это обработать?

Столбцы с внешним ключом могут иметь значения NULL - это не FK, который накладывает ограничение "Нет пустых значений", это обнуляемость столбец (измените столбец на departmantid INT NOT NULL), который налагает это. FK ссылается на первичный ключ, и первичный ключ может не иметь значение null (или в некоторых БД не более одной записи может иметь [частично] нулевой PK), но вы можете просто оставить эти отделы пустыми. Если вы измените столбец, чтобы он не был нулевым, вам нужно сначала исправить значения NULL, иначе изменение не удастся

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