簡體   English   中英

需要數據庫架構設計建議嗎?

[英]Database Schema Design Suggestion Required?

我有一個用戶表。一個用戶可以有很多子用戶。每個子用戶可以有多個子用戶。

User Table.
Id      UserName   other...No of columns.
 1      User1
 2      user2
 3      user1_1
 4      user1_2
 5      user1_2_1
 6      user1_2_2

這里的User1_1是User1的子用戶,而User1_2_2是User1_2的子用戶。 這是自參考表的問題,但深度為3到4級。 我想知道誰是特定用戶的主控者或特級大師?

group Table.
Id  ,   Owner_userId
1   ,     1
2   ,     4


user_groupTable
 groupId , UserId
   1     ,  3
   1     ,  4
   2     ,  5
   2     ,  6

通過這個我可以實現我的目標。 我在流浪中是否有解決此問題的最佳方法? 這種方法的困難之處在於查詢可能會變得復雜。 請告訴我最好的方法,謝謝..

如果只有一個,則用戶的父母為0或1,為什么不使用以下結構

User Table.
Id      UserName   other...No of columns. ParentUserID
 1      User1                             NULL
 2      user2                             NULL
 3      user1_1                           1
 4      user1_2                           1
 5      user1_2_1                         4
 6      user1_2_2                         4
 7      user2_1                           2

這是一個非常簡單的方法,您將可以使用以下方法獲取所有頂級(大師)用戶

SELECT * FROM dbo.Users WHERE ParentID = NULL

要獲得特定用戶的父母,您將能夠做到

SELECT * FROM dbo.Users WHERE ID = *then what ever the parent user ID of the user you are looking at*

要獲得樹狀結構,可以使用遞歸CTE,如果您希望我發布此額外信息,請隨時發表評論(但請先嘗試:)

祝好運!

您可以這樣做:

CREATE TABLE users (
id int(11) NOT NULL AUTO_INCREMENT,
parent_id int(11) NOT NULL DEFAULT '0',
user_name varchar(32),
.... more columns ...
);

並在此處插入一些數據:

INSERT INTO users VALUES (1,0,'User1');
INSERT INTO users VALUES (2,0,'User2');
INSERT INTO users VALUES (3,1,'User1_1');
INSERT INTO users VALUES (4,1,'User1_2');
INSERT INTO users VALUES (5,4,'User1_2_1');...

並創建一個像這樣的函數:

CREATE FUNCTION f_get_top_user_id (xusers_id INT)
RETURNS text
DETERMINISTIC
BEGIN

DECLARE xtop_id int;
DECLARE xparent_id int;

SELECT u.parent_id INTO xparent_id FROM users u WHERE u.id = xusers_id;
SELECT u.id INTO xtop_id FROM users u WHERE u.id = xusers_id;

WHILE (xparent_id > 0) DO
    BEGIN
        SELECT u.id INTO xtop_id FROM users u WHERE u.id = xparent_id;
        SELECT u.parent_id INTO xparent_id FROM users u WHERE u.id = xparent_id;
    END;
END WHILE;

RETURN xtop_id;

END

如果您像這樣調用該函數

SELECT f_get_top_user_id(5);

它應該返回1(User1)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM