Oracle
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> Oracle

hai khóa ngoại cho cùng một kiểu dữ liệu số và tham chiếu nó đến hai bảng

Mô hình dữ liệu của bạn dường như không có nhiều ý nghĩa. Bạn có ba thực thể khác nhau admin , userlogin . Cả ba người trong số họ dường như lưu trữ thông tin giống nhau - địa chỉ email, tên người dùng và mật khẩu (mà tôi hy vọng về bảo mật cơ bản thực sự là băm mật khẩu). Nếu có bất kỳ mối quan hệ nào giữa các bảng, điều đó vi phạm chuẩn hóa cơ bản vì bạn đang lưu trữ cùng một thông tin ở nhiều nơi.

Không biết các yêu cầu kinh doanh đối với các thực thể mà bạn đang thực sự cố gắng tạo mô hình, rất khó để biết chính xác những gì bạn muốn.

Dự đoán đầu tiên của tôi là bạn có hai loại người dùng, quản trị viên và người dùng thông thường, mỗi loại đều có thể đăng nhập vào ứng dụng của bạn. Giả sử rằng các thuộc tính của người dùng khá nhất quán bất kể vai trò của họ (cả quản trị viên và người dùng thông thường đều có địa chỉ email, mật khẩu, v.v.) thì cách đơn giản nhất để lập mô hình đó là với một login duy nhất bảng có login_type điều đó cho bạn biết liệu người dùng cụ thể là quản trị viên hay người dùng thông thường

create table login (
  login_id      integer primary key,
  email         varchar2(255),
  password_hash raw(32),
  login_type    varchar2(1) check( login_type IN ('A', 'U') )
);

Bạn có thể làm cho điều đó linh hoạt hơn một chút bằng cách tạo một bảng tra cứu cho các loại đăng nhập mà login của bạn tham chiếu bảng

create table login_type_lkup (
  login_type_code varchar2(1) primary key,
  login_type_desc varchar2(255)
);

create table login (
  login_id        integer primary key,
  email           varchar2(255),
  password_hash   raw(32),
  login_type_code varchar2(1) references login_type_lkup( login_type_code )
);

Nếu bạn muốn linh hoạt hơn, bước tiếp theo sẽ là nói rằng thông tin đăng nhập không thực sự có một loại. Thay vào đó, họ có một hoặc nhiều vai trò có một số quyền. Bạn có thể có admin vai trò và regular user vai trò ban đầu nhưng sau đó muốn thêm một read only user vai trò, một superuser vai trò, v.v. Trong trường hợp đó, bạn sẽ có một cái gì đó giống như

create table login (
  login_id        integer primary key,
  email           varchar2(255),
  password_hash   raw(32)
);

create table role (
  role_id integer primary key,
  role_desc varchar2(255)
);

create table permission (
  permission_id integer primary key,
  permission_desc varchar2(255)
);

create table login_role (
  login_id integer references login(login_id), 
  role_id  integer references role(role_id),
  primary key pk_login_role( login_id, role_id )
);

create table role_permission (
  role_id       integer references role(role_id),
  permission_id integer references permission(permission_id),
  primary key pk_role_permission( role_id, permission_id )
);


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Hàm SUBSTR () trong Oracle

  2. Kết nối PDO với cơ sở dữ liệu Oracle

  3. Truy cập phần tử thứ 2 trong cột varray

  4. Sử dụng OraclePreparedStatement với Kết nối DBCP

  5. Ứng dụng VB6 oracle 12 kết nối 64bit