Подтвердить что ты не робот

Как ограничить значение столбца в SQLite/MySQL

Я хотел бы ограничить значение столбца в таблице SQL. Например, значения столбцов могут быть только "автомобиль" или "велосипед" или "фургон". Мой вопрос заключается в том, как вы достигаете этого в SQL, и это хорошая идея сделать это на стороне БД или я должен позволить приложению ограничить ввод.

У меня также есть намерение добавить или удалить больше значений в будущем, например "грузовик"

Тип баз данных, которые я использую, - SQLite и MySQl

4b9b3361

Ответ 1

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

С этой конструкцией я бы окончательно решил регулировать это на уровне БД, а не в приложении.

Ответ 2

Для MySQL вы можете использовать тип данных ENUM.

column_name ENUM ( "маленький", "средний", "большой" )

См. Справочник по MySQL: Тип ENUM

Чтобы добавить к этому, мне всегда лучше ограничивать сторону БД И на стороне приложения. Enum плюс поле Select, и вы закрыты.

Ответ 3

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

В SQLite:

create table MyTable
(
    name string check(name = "car" or name = "bike" or name = "van")
);

В MySQL:

create table MyTable
(
    name ENUM('car', 'bike', 'van')
);

Ответ 4

Вы должны использовать ограничение проверки. В SQL Server он работает следующим образом:

ALTER TABLE Vehicles
ADD CONSTRAINT chkVehicleType CHECK (VehicleType in ('car','bike','van'));

Я не уверен, что это стандарт ANSI, но я уверен, что MySQL имеет аналогичную конструкцию.

Ответ 5

Если вы хотите пойти с проверкой на стороне БД, вы можете использовать триггеры. См. this для SQLite, и это подробное руководство MySQL.

Итак, вопрос в том, следует ли использовать проверку базы данных или нет. Если у вас несколько клиентов - независимо от того, являются ли они разными программами или несколькими пользователями (возможно, с разными версиями программы), то лучше всего подходит маршрут базы данных. База данных (надеюсь) централизована, поэтому вы можете отделить некоторые детали проверки. В вашем конкретном случае вы можете проверить, что значение, вставленное в столбец, содержится в отдельной таблице, которая просто перечисляет допустимые значения.

С другой стороны, если у вас мало опыта работы с базами данных, планируете нацеливаться на несколько разных баз данных, и у вас нет времени для разработки опыта, возможно, простая проверка уровня приложения является наиболее целесообразным выбором.