یک ایدهای دارم که توی پیاده سازی دیتابیس مشکل داشتم،
چطوری میشه یک دیتابیس درست کرد که رابطه فایل و دایرکتوری رو بشه داخلش ذخیره کرد؟
برای مثال ما پوشهای به نام 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)
به نظر من این راه دوم بهتره که path هم داره. اینطوری اگر بخوایم همه فایل های زیرمجموعه یک پوشه (به طور مثال پوشه root/usr) رو بگیریم، راحت با یک کوئری ساده میشه انجامش داد.
SELECT * FROM file WHERE is_directory IS FALSE AND path LIKE 'root/usr/%'
ولی با روش اولی، ی چیزی شبیه گراف داریم که البته با اونم میشه چنین کوئری زد، ولی باید درگیر گراف بشیم و از دستور WITH توی دیتابیس استفاده کنیم که پیچیدگیش بیشتره