SQL-запрос для генерации условия столбца, когда оно не обязательно должно быть пустым или заполненным - PullRequest
0 голосов
/ 08 декабря 2018

У меня проблема с моим SQL-запросом.Это больше родительский и дочерний стол.Так как пользователь может быть либо родителем, либо дочерним.Я создал таблицу из 4 столбцов.

1-й столбец - это имя пользователя пользователя. 2-й столбец - это пароль пользователя. 3-й столбец - это тип пользователя (родительский или дочерний). 4-й столбец - это столбец родительского имени пользователя (когда пользователь является пользователем).child).

Теперь, когда пользователь регистрируется в качестве родителя, ему не обязательно заполнять 4-й столбец.Но когда пользователь регистрируется как ребенок, он / она должен заполнить его.Кто-нибудь может помочь?

Обратите внимание, это должна быть только 1 таблица.

Вот мой SQL-запрос:

CREATE TABLE user (uname text primary key not null, password text not null, usertype text not null, parent text);

Ответы [ 3 ]

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

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

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

ALTER TABLE user 
    ADD CONSTRAINT ck_CheckParents
CHECK  
    ( child is null and parent is not null )
     or ( child is not null and parent is null )
GO
0 голосов
/ 08 декабря 2018

Теперь, когда пользователь регистрируется как родитель, ему / ей не обязательно заполнять 4-й столбец.Но когда пользователь регистрируется как ребенок, он / она должен заполнить его.

Обратите внимание, что это описание позволяет «родителю» иметь родителя.

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

alter users add constraint ck_users_parent
    check ( not (usertype = 'child' and parent is null) );

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

Моя рекомендация?Удалите столбец типа пользователя.Пусть данные говорят сами за себя.У вас есть иерархическая структура, поэтому вы можете запросить ее, чтобы получить «тип» пользователя.

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

Ваше требование на 100% работает, добавив эти проверочные ограничения, как показано ниже.

ALTER TABLE user ADD CONSTRAINT
ck_CheckParents CHECK 
(
    ((usertype='parent') and (parent is null)) or 
    ((usertype='child') and (parent is not null ))
)
GO

Если вам нужно, чтобы что-то было в столбце parent, когда тип пользователя «Родитель», просто удалитеодно условие.

ALTER TABLE user ADD CONSTRAINT
ck_CheckParents CHECK  
    ((usertype='child') and (parent is not null ))
GO
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...