27 lines
986 B
SQL
27 lines
986 B
SQL
-- Tạo bảng mà không có ràng buộc
|
|
CREATE TABLE IF NOT EXISTS user_roles (
|
|
user_id UUID NOT NULL,
|
|
role_id UUID NOT NULL,
|
|
created_at TIMESTAMP WITH TIME ZONE DEFAULT CURRENT_TIMESTAMP,
|
|
PRIMARY KEY (user_id, role_id)
|
|
);
|
|
|
|
-- Tạo index cho hiệu suất truy vấn tốt hơn
|
|
CREATE INDEX idx_user_roles_user_id ON user_roles(user_id);
|
|
CREATE INDEX idx_user_roles_role_id ON user_roles(role_id);
|
|
|
|
-- Thêm ràng buộc khóa ngoại nếu bảng tồn tại
|
|
DO $$
|
|
BEGIN
|
|
IF EXISTS (SELECT 1 FROM information_schema.tables WHERE table_name = 'users') THEN
|
|
ALTER TABLE user_roles ADD CONSTRAINT fk_user_roles_user
|
|
FOREIGN KEY (user_id) REFERENCES users(id) ON DELETE CASCADE;
|
|
END IF;
|
|
|
|
IF EXISTS (SELECT 1 FROM information_schema.tables WHERE table_name = 'roles') THEN
|
|
ALTER TABLE user_roles ADD CONSTRAINT fk_user_roles_role
|
|
FOREIGN KEY (role_id) REFERENCES roles(id) ON DELETE CASCADE;
|
|
END IF;
|
|
END
|
|
$$;
|