การออกแบบฐานข้อมูลผู้ใช้ระบบ ควรออกแบบอยางงัยครับช่วยแนะนำที
ไม่ลองดูตัวอย่างจากของ MySQL ล่ะครับ หรือถ้าของสาย DotNet ก็พวกตารางที่ขึ้นต้นด้วย aspnet_ ทั้งสองตัวอย่างก็จะเหมาะกันไปคนละแบบอ่ะครับ แต่จากที่อ่านที่คุณถามมานี่ น่าจะเหมือนกับของ MySQL มากกว่าครับ เพียงแต่ของ MySQL เค้าไม่ีมีเรื่องจัดกลุ่ม
ลองดูตัวอย่างแบบนี้ครับ
TB : AppUsers
- UserID PK Unique Index
- Name
- Lastname
- Password
- GroupID FK
TB : AppGroups
- GroupID PK Unique Index
- GroupName
- ManageUsers Char(1)
- ManageGroup Char(1)
- Recevie Char(1)
- ManageStore Char(1)
ก็จะเป็นการกำหนดความสามารถก่อนน่ะครับ ว่าโปรแกรมเราจะมีการกำหนดสิทธิให้ทำอะไรบ้าง แล้วก็เอามาเป็น column นึง ใส่ค่าเป็น Y หรื N แล้วเวลา login มาโปรแรกมก็อ่านแล้วก็ตรวจสอบว่าสามารถทำอะไรได้บ้างอ่ะครับ ใช้แค่ 2 tables เอง
ประวัติการแก้ไข 2010-12-02 15:02:16
Date :
2010-12-02 14:49:37
By :
salapao_codeman
ลองนึกถึง windows login ดูครับ ว่า มันใช้หลักอย่างไร คร่าวๆ
Table User คือ ผู้ใช้งาน
[USER_ID] [bigint] IDENTITY(1,1) NOT NULL,
[USER_NAME] [nvarchar](50) NOT NULL,
[PWD] [nvarchar](50) NOT NULL,
[PWD_ENCRYPT] [nvarchar](200) NOT NULL,
[USER_STATUS] [nvarchar](50) NOT NULL,
[LAST_LOGIN_FAILURE] [datetime] NULL,
[CREATED_BY] [nvarchar](100) NOT NULL,
[CREATED_DATETIME] [datetime] NOT NULL,
Table Role หรือ Group ใน windows นั่นเอง อันนี้คือ หน้าที่ หรือกลุ่ม เช่น Administrator, Everyone, PowerUser เป็นต้น
[SQ] [bigint] IDENTITY(1,1) NOT NULL,
[ROLE_ID] [bigint] NOT NULL,
[ROLE_NAME] [nvarchar](100) NOT NULL,
[ROLE_DESC] [nvarchar](200) NOT NULL,
[ROLE_STATUS] [nvarchar](50) NOT NULL,
[CREATED_BY] [nvarchar](100) NOT NULL,
[CREATED_DATETIME] [datetime] NOT NULL,
Table Permission คือ สิิทธิในการใช้งาน เช่น สร้าง ลบ แก้ไข copy ได้ เป็นต้น
[SQ] [bigint] IDENTITY(1,1) NOT NULL,
[PERMISSION_ID] [bigint] NOT NULL,
[PERMISSION_NAME] [nvarchar](100) NOT NULL,
[PERMISSION_DESC] [nvarchar](200) NOT NULL,
[PERMISSION_STATUS] [nvarchar](50) NOT NULL,
[CREATED_BY] [varchar](100) NOT NULL,
[CREATED_DATETIME] [datetime] NOT NULL,
Table Role-Permission คือบอกว่า กลุ่มนี้ มีสิทธิอะไรบ้าง เช่น PowerUser สร้าง แก้ไข copy ได้ แต่ลบข้อมูลไม่ได้
[SQ] [bigint] IDENTITY(1,1) NOT NULL,
[ROLE_PERMISSION_ID] [bigint] NOT NULL,
[ROLE_ID] [bigint] NOT NULL,
[PERMISSION_ID] [bigint] NOT NULL,
[CREATED_BY] [nvarchar](100) NOT NULL,
[CREATED_DATETIME] [datetime] NOT NULL,
Table User-Role คือบอกว่า User นี้ อยู่กลุ่มอะไร เช่น นายก อยู่กลุ่ม Administrator สามารถทำได้ทุกอย่าง
[USER_ROLE_ID] [bigint] IDENTITY(1,1) NOT NULL,
[USER_ID] [bigint] NOT NULL,
[ROLE_ID] [bigint] NOT NULL,
[CREATED_BY] [nvarchar](100) NOT NULL,
[CREATED_DATETIME] [datetime] NOT NULL,
ทั้งหลายทั้งปวงก็ประมาณนี้ครับ
"ตอนผมเท่าคุณ ผมก็ blank เหมือนกัน"
Date :
2010-12-02 15:02:42
By :
numenoy
ถ้าเป็นแบบนี้ได้ไหมครับ
คุณสร้างมาอีก 1 table เป็น table ที่ list ตำแหน่งของคุณทั้งหมด แล้วใน table นั้นก็มี id user ด้วย (ตำแหน่ง เก็บแค่ 0 กับ 1 ก็ได้)
ที่นี้คุณก็สร้างมา page นึงไว้สำหรับแก้ไขค่าพวกนี้ ที่นี้ 1 user อยากจะเป็นตำแหน่งอะไรก็มาแก้ไขที่ page นี้ น่าจะคล้ายๆพวก user online-offline ละมั้ง แบบนี้ได้ไหมครับ
Date :
2010-12-02 15:23:20
By :
- -
Quote: แต่ว่าผมอยากได้ 1 คนมีได้หลายสิทธิ์
งงเหมือนกันค่ะ เป็นแบบที่คุณ numenoy แนะนำหรือเปล่า
คิดเล่น ๆ นะคะ ถ้าให้ user 1 คนมีได้หลายสิทธิ์ แล้วจะใช้สิทธิ์ไหนดีล่ะคะ
คงต้องขยายความกันหน่อย บางทีเราอาจจะตีความผิดไปก็ได้
Quote: คือผมคิดไม่ออกเกี่ยวกับการแบ่งสิทธิ์การใช้งานอะครับ พี่ๆช่วยออกแบบหรือช่วยแนะนำให้ผมหน่อยน่าครับ
คือผมจะสร้างฐานข้อมูลผู้ใช้ระบบ ก็จะมี 2 Table คือ 1.ข้อมูลผู้ใช้ระบบ ประกอบด้วย รหัส ชื่อ username password ฯลฯ , 2.ข้อมูลประเภทผู้ใช้ระบบ ประกอบด้วย รหัสประเภท ชื่อประเภท(ตัวอย่างประเภท admin,พนักงานจัดการสินค้า,พนักงานจัดการข้อมูลคงคลัง,พนักงานจัดการข้อมูลการขาย,สมาชิก ฯลฯ) ทั้ง 2 Table นี้ มันจะเมื่อเอามาเชื่อกันมันจะเป็น Meny to meny ตามหลักมันก็จะให้สร้างตารางขึ้นมาอีก 1 ตาราง ผมก็จะสร้างตาราง กลุ่มผู้ใช้ระบบ ก็จะมี รหัสกลุ่ม รหัสผู้ใช้ระบบ รหัสประเภท แต่หลังจากนี้ผมคิดไม่ออกอ่าครับ คืออาจารย์ต้องการ ให้เราสามารถที่จะเพิ่มสิทธิ์เข้าไปได้ว่า คนนี้เป็น admin แต่สามารถกำหนดให้เค้า เป็นพนักงานจัดการข้อมูลสินค้าได้ ก็คือ 1 คนสามารถมีได้หลายสิทธิ์ แล้ว สิทธิ์นั้นก็สามารถมีได้หลายคน ผมต้องออกแบบฐานข้อมูลอยางงัยอะครับ ตอนนี้ผมยังออกแบบไม่ได้เลย งงๆมากๆ เลยยังไม่ได้ลง code พี่ๆช่วยแนะนำหรือช่วยบอกหน่อยนะครับ ขอบคุงมากๆเลยครับ
จากข้างต้น ตาราง ผู้ใช้ระบบ ไม่มีอะไร ข้ามไป ทีนี้มาดู ประเภทผู้ใช้ระบบ
Quote: (ตัวอย่างประเภท admin,พนักงานจัดการสินค้า,พนักงานจัดการข้อมูลคงคลัง,พนักงานจัดการข้อมูลการขาย,สมาชิก ฯลฯ)
จากตรงนี้คุณสามารถ แยก admin ออกมาจากอันอื่นได้นะ แค่แนวคิดนะคะ
อาจจะแยกเป็น
ตาราง ตำแหน่งงาน(พนักงานจัดการสินค้า,พนักงานจัดการข้อมูลคงคลัง,พนักงานจัดการข้อมูลการขาย,สมาชิก ฯลฯ)
ตาราง ประเภทหรือกลุ่ม ผู้ใช้งาน(Admin, Power user, User, Guest, Other...)
User A เป็น พนักงานจัดการสินค้า อยู่ในกลุ่ม Admin
User B เป็น พนักงานจัดการสินค้า อยู่ในกลุ่ม Power user
User C เป็น พนักงานจัดการข้อมูลคงคลัง อยู่ในกลุ่ม Admin
แบบนี้ หลักการเดียวกับ ของคุณ numenoy ค่ะ ลองเอาไปคิดดูนะคะ
ประวัติการแก้ไข 2010-12-02 15:33:40
Date :
2010-12-02 15:32:31
By :
ultrasiam
เห็นด้วยอย่างทีุ่คุณ ultrasiam ว่ามาครับ ตัวอย่างแบบของคุณ numenoy ก็ดีครับ แบบ advance เลย ทำได้อย่างที่คุณต้องการแน่ๆ แต่ลองคิดดูนะ คุณจะต้องมาปวดหัวกับการตรวจสอบสิทธิขนาดไหน ถ้า 1 user สามารถอยู่ได้มากกว่า 1 group แล้วถ้าสิทธิของแต่ละ group มันทับซ้อนกัน ก็ต้องมานั่งคิดเงือนไขอีกว่า ยอมอันนี้ อันนี้ไม่ยอม งานมันจะจบยากเอานาครับ
ที่ผมยกตัวอย่างไปลองเอามาทำดู ได้ตามรูปครับ ง่ายๆ ตรงไปตรงมา อยากทำอะไรได้ก็สร้าง group แล้วเลือกให้สิทธินั้นเป็น Y แล้วจับ user ไปอยู่ group นั้นครับ
ก็ลองทำความเข้าใจจากทุกๆ ความเห็นแล้วเอาไปประยุกต์ใช้เอาครับ
Date :
2010-12-03 00:56:53
By :
salapao_codeman
Load balance : Server 04