Refactor database schema for roles and visibility management
- Updated the roles table to use `code` as the primary key, enhancing readability and simplifying junction tables. - Modified `user_roles` and `product_role_visibility` tables to reference `role_code` instead of `role_id`, maintaining many-to-many relationships. - Added foreign key constraints and created new indexes to optimize queries. - Removed the previous migration file that was no longer needed, ensuring a cleaner migration history. - Updated related documentation to reflect the new schema changes and their benefits.
This commit is contained in:
@@ -385,9 +385,10 @@
|
||||
"primaryKey": false,
|
||||
"notNull": true
|
||||
},
|
||||
"role_id": {
|
||||
"name": "role_id",
|
||||
"type": "uuid",
|
||||
"role_code": {
|
||||
"name": "role_code",
|
||||
"type": "role_code",
|
||||
"typeSchema": "public",
|
||||
"primaryKey": false,
|
||||
"notNull": true
|
||||
},
|
||||
@@ -400,8 +401,8 @@
|
||||
}
|
||||
},
|
||||
"indexes": {
|
||||
"product_role_visibility_product_id_role_id_unique": {
|
||||
"name": "product_role_visibility_product_id_role_id_unique",
|
||||
"product_role_visibility_product_id_role_code_unique": {
|
||||
"name": "product_role_visibility_product_id_role_code_unique",
|
||||
"columns": [
|
||||
{
|
||||
"expression": "product_id",
|
||||
@@ -410,7 +411,7 @@
|
||||
"nulls": "last"
|
||||
},
|
||||
{
|
||||
"expression": "role_id",
|
||||
"expression": "role_code",
|
||||
"isExpression": false,
|
||||
"asc": true,
|
||||
"nulls": "last"
|
||||
@@ -435,6 +436,21 @@
|
||||
"concurrently": false,
|
||||
"method": "btree",
|
||||
"with": {}
|
||||
},
|
||||
"product_role_visibility_role_code_idx": {
|
||||
"name": "product_role_visibility_role_code_idx",
|
||||
"columns": [
|
||||
{
|
||||
"expression": "role_code",
|
||||
"isExpression": false,
|
||||
"asc": true,
|
||||
"nulls": "last"
|
||||
}
|
||||
],
|
||||
"isUnique": false,
|
||||
"concurrently": false,
|
||||
"method": "btree",
|
||||
"with": {}
|
||||
}
|
||||
},
|
||||
"foreignKeys": {
|
||||
@@ -451,15 +467,15 @@
|
||||
"onDelete": "cascade",
|
||||
"onUpdate": "no action"
|
||||
},
|
||||
"product_role_visibility_role_id_roles_id_fk": {
|
||||
"name": "product_role_visibility_role_id_roles_id_fk",
|
||||
"product_role_visibility_role_code_roles_code_fk": {
|
||||
"name": "product_role_visibility_role_code_roles_code_fk",
|
||||
"tableFrom": "product_role_visibility",
|
||||
"tableTo": "roles",
|
||||
"columnsFrom": [
|
||||
"role_id"
|
||||
"role_code"
|
||||
],
|
||||
"columnsTo": [
|
||||
"id"
|
||||
"code"
|
||||
],
|
||||
"onDelete": "cascade",
|
||||
"onUpdate": "no action"
|
||||
@@ -607,18 +623,11 @@
|
||||
"name": "roles",
|
||||
"schema": "",
|
||||
"columns": {
|
||||
"id": {
|
||||
"name": "id",
|
||||
"type": "uuid",
|
||||
"primaryKey": true,
|
||||
"notNull": true,
|
||||
"default": "gen_random_uuid()"
|
||||
},
|
||||
"code": {
|
||||
"name": "code",
|
||||
"type": "role_code",
|
||||
"typeSchema": "public",
|
||||
"primaryKey": false,
|
||||
"primaryKey": true,
|
||||
"notNull": true
|
||||
},
|
||||
"display_name": {
|
||||
@@ -672,15 +681,7 @@
|
||||
"indexes": {},
|
||||
"foreignKeys": {},
|
||||
"compositePrimaryKeys": {},
|
||||
"uniqueConstraints": {
|
||||
"roles_code_unique": {
|
||||
"name": "roles_code_unique",
|
||||
"nullsNotDistinct": false,
|
||||
"columns": [
|
||||
"code"
|
||||
]
|
||||
}
|
||||
},
|
||||
"uniqueConstraints": {},
|
||||
"policies": {},
|
||||
"checkConstraints": {},
|
||||
"isRLSEnabled": false
|
||||
@@ -702,9 +703,10 @@
|
||||
"primaryKey": false,
|
||||
"notNull": true
|
||||
},
|
||||
"role_id": {
|
||||
"name": "role_id",
|
||||
"type": "uuid",
|
||||
"role_code": {
|
||||
"name": "role_code",
|
||||
"type": "role_code",
|
||||
"typeSchema": "public",
|
||||
"primaryKey": false,
|
||||
"notNull": true
|
||||
},
|
||||
@@ -751,8 +753,8 @@
|
||||
}
|
||||
},
|
||||
"indexes": {
|
||||
"user_roles_user_id_role_id_unique": {
|
||||
"name": "user_roles_user_id_role_id_unique",
|
||||
"user_roles_user_id_role_code_unique": {
|
||||
"name": "user_roles_user_id_role_code_unique",
|
||||
"columns": [
|
||||
{
|
||||
"expression": "user_id",
|
||||
@@ -761,7 +763,7 @@
|
||||
"nulls": "last"
|
||||
},
|
||||
{
|
||||
"expression": "role_id",
|
||||
"expression": "role_code",
|
||||
"isExpression": false,
|
||||
"asc": true,
|
||||
"nulls": "last"
|
||||
@@ -787,6 +789,21 @@
|
||||
"method": "btree",
|
||||
"with": {}
|
||||
},
|
||||
"user_roles_role_code_idx": {
|
||||
"name": "user_roles_role_code_idx",
|
||||
"columns": [
|
||||
{
|
||||
"expression": "role_code",
|
||||
"isExpression": false,
|
||||
"asc": true,
|
||||
"nulls": "last"
|
||||
}
|
||||
],
|
||||
"isUnique": false,
|
||||
"concurrently": false,
|
||||
"method": "btree",
|
||||
"with": {}
|
||||
},
|
||||
"user_roles_status_idx": {
|
||||
"name": "user_roles_status_idx",
|
||||
"columns": [
|
||||
@@ -817,15 +834,15 @@
|
||||
"onDelete": "cascade",
|
||||
"onUpdate": "no action"
|
||||
},
|
||||
"user_roles_role_id_roles_id_fk": {
|
||||
"name": "user_roles_role_id_roles_id_fk",
|
||||
"user_roles_role_code_roles_code_fk": {
|
||||
"name": "user_roles_role_code_roles_code_fk",
|
||||
"tableFrom": "user_roles",
|
||||
"tableTo": "roles",
|
||||
"columnsFrom": [
|
||||
"role_id"
|
||||
"role_code"
|
||||
],
|
||||
"columnsTo": [
|
||||
"id"
|
||||
"code"
|
||||
],
|
||||
"onDelete": "cascade",
|
||||
"onUpdate": "no action"
|
||||
|
||||
@@ -15,13 +15,6 @@
|
||||
"when": 1762074397305,
|
||||
"tag": "0001_clammy_bulldozer",
|
||||
"breakpoints": true
|
||||
},
|
||||
{
|
||||
"idx": 2,
|
||||
"version": "7",
|
||||
"when": 1762157410000,
|
||||
"tag": "0002_refactor_roles_primary_key",
|
||||
"breakpoints": true
|
||||
}
|
||||
]
|
||||
}
|
||||
Reference in New Issue
Block a user