2

だから、私は現在、ユーザーがいつでも自分の詳細を登録、ログイン、更新できるデータベースシステムを使用しています。データベースには 5 つのロールが含まれています。

1. Public
2. Member
3. Moderator
4. Coordinator
5. Admin

ユーザーに複数の役割を割り当てられるようにしたいと考えています。たとえば、管理者もメンバーになることができます。したがって、データベースでは次のように表示されます。

User_id    |    Role_ID
------------------------
user1      | 2, 5

^ postgresql に多値 ID を追加することは可能ですか?

4

2 に答える 2

2

配列型のフィールドを使用して、値のリストを格納できます。しかし、あなたが望むものを整理するためのもっと良い方法があると思います。

次のように、role_namesと別のrolesという1 つのテーブルを作成します。

CREATE TABLE role_names
(
  id serial NOT NULL,
  name text NOT NULL,
  CONSTRAINT role_names_pkey PRIMARY KEY (id),
  CONSTRAINT role_names_name_key UNIQUE (name)
);

CREATE TABLE roles
(
  user_id bigint NOT NULL,
  role_id bigint NOT NULL,
  CONSTRAINT roles_pkey PRIMARY KEY (user_id, role_id),
  CONSTRAINT roles_role_id_fkey FOREIGN KEY (role_id)
      REFERENCES role_names (id) MATCH SIMPLE
      ON UPDATE CASCADE ON DELETE RESTRICT
);

テーブルrole_namesに、必要なすべてのロールを配置します。テーブル ロールでは、任意の数のロールを任意のユーザーに割り当てたり、削除したりできます。また、特定のユーザーまたは特定のロールのテーブルロールを検索することもできます。配列を検索するよりもはるかにきれいで高速です。

user_id フィールドにも自由に FK 制約を追加してください。

于 2013-09-13T03:19:58.677 に答える
1

はい、int配列を使用してロールのリストを格納できます。

関連する質問は次のとおりです-ジャンクションテーブルと外部キー配列?

于 2013-09-13T03:04:28.607 に答える