پیاده سازی رابطه فایل و دایرکتوری در دیتابیس(جنگو)

سلام، پیشاپیش عید مبارک.

یک اید‌ه‌ای دارم که توی پیاده سازی دیتابیس مشکل داشتم،
چطوری می‌شه یک دیتابیس درست کرد که رابطه فایل و دایرکتوری رو بشه داخلش ذخیره کرد؟

برای مثال ما پوشه‌ای به نام C داریم که داخل پوشه B هست، و خود این پوشه داخل پوشه A هست.
و فایل هایی هم داریم در هر پوشه،

دیتابیس چنین ایده‌ای چطور می‌تونه پیاده سازی بشه. میشه تیبل دایرکتوری رو به خودش کلید خارجی کرد؟

class Directoy(models.Model):
    parent = models.ForeignKey('self', blank=True)
    name = models.CharField(max_length=255)

class FIle(models.Model):
    parent = models.ForeignKey(Directory)
    name = models.charfield(max_length=255)
    
1 پسندیده

بله میشه، خودتونم توی کد اینکارو کردید، مشکلش چیه؟

عیدتون هم مبارک

1 پسندیده

سلام ممنونم، سوالم اینه که پیاده سازی این دیتابیس درست هست؟
ممکنه راه بهتری هم باشه؟

مثلا توی یونیکس یک دایرکتوری یک فایله،
میشه همینطوری هم پیاده سازی کرد؟

مثلا یک کلاس که فقط فایله،
و یک بولین داره که مشخص می‌کنه دایرکتوری هست یا خیر،
و جای نام، مسیر داشته باشه،

شما با تجربه ترین، کدوم راه درسته؟

شبیه به این مثلا.


class File(miodels.Model):
    is_directory = Models.BoolianField(default=False)
    path = Models.TextField()
1 پسندیده

به نظر من این راه دوم بهتره که path هم داره. اینطوری اگر بخوایم همه فایل های زیرمجموعه یک پوشه (به طور مثال پوشه root/usr) رو بگیریم، راحت با یک کوئری ساده میشه انجامش داد.

SELECT * FROM file WHERE is_directory IS FALSE AND path LIKE 'root/usr/%'

ولی با روش اولی، ی چیزی شبیه گراف داریم که البته با اونم میشه چنین کوئری زد، ولی باید درگیر گراف بشیم و از دستور WITH توی دیتابیس استفاده کنیم که پیچیدگیش بیشتره

1 پسندیده

خیلی خیلی ممنونم. از راه دوم استفاده می‌کنم. ممنون

1 پسندیده

فکر کنم یه فانکشن جوری که میخواین تایین کنید و یه تکه کد براتون میزارم امید وارم به دردت بخوره

1 پسندیده

کاش کد رو به صورت تصویر نفرستی :slight_smile:

1 پسندیده

سلام، خیلی خیلی لطف کردین وقت گذاشتید، ممنونم.
پروژه اوکی شده تا الان‌.